package view.interfaces;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;

import business.dao.ProdutoDAO;
import business.dao.SaboresDAO;
import business.model.ProdutoTO;
import business.model.SaboresTO;
import business.model.tableModel.ProdutoTableModel;
import exception.BusinessException;
import exception.InterfaceException;
import exception.UsuarioException;

public class telaPizza extends JFrame {

	private JPanel contentPane;
	private JTextField txtSabor;
	private JTable tblSabores;
	private JTable tblSaboresSelecionados;
	ProdutoDAO produtoDAO = new ProdutoDAO();
	SaboresDAO saboresDAO = new SaboresDAO();
	List<ProdutoTO> produtoTOSelecionados = new ArrayList<ProdutoTO>();
	List<ProdutoTO> produtoTOLista = new ArrayList<ProdutoTO>();
	ProdutoTableModel produtoTableModelSelecionados;
	ProdutoTableModel produtoTableModelLista;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					telaPizza frame = new telaPizza();
					frame.setVisible(true);
					frame.listarProdutos();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	private void listarProdutos() {
		// TODO Auto-generated method stub
		try {
			produtoTableModelLista = new ProdutoTableModel(
					produtoDAO.listar(null));
			tblSabores.setModel(produtoTableModelLista);
		} catch (UsuarioException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (BusinessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterfaceException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	private void limpar() {
		// TODO Auto-generated method stub
		txtSabor.setText("");
		produtoTOSelecionados = new ArrayList<ProdutoTO>();
		produtoTOLista = new ArrayList<ProdutoTO>();
		produtoTableModelSelecionados = new ProdutoTableModel(
				new ArrayList<ProdutoTO>());
		tblSaboresSelecionados.setModel(produtoTableModelSelecionados);
		listarProdutos();

	}

	/**
	 * Create the frame.
	 */
	public telaPizza() {
		setTitle("Pizza");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 595, 466);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);

		JLabel lblNewLabel = new JLabel("Adicionar Sabor de Pizza");
		lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 14));

		JButton btnVoltar = new JButton("VOLTAR");
		btnVoltar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				ListarPizzas listarPizzas = new ListarPizzas();
				listarPizzas.frmPizza.setVisible(Boolean.TRUE);
				setVisible(Boolean.FALSE);
			}
		});
		btnVoltar.setFont(new Font("Tahoma", Font.BOLD, 12));

		JLabel lblSabor = new JLabel("SABOR: ");
		lblSabor.setFont(new Font("Tahoma", Font.BOLD, 11));

		txtSabor = new JTextField();
		txtSabor.setColumns(10);

		JButton btnSalvar = new JButton("SALVAR");
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				try {
					SaboresTO to = new SaboresTO();
					to.setDescricao(txtSabor.getText());
					to.getProdutoTOs().addAll(produtoTOSelecionados);
					saboresDAO.incluir(to);
					limpar();
				} catch (UsuarioException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (BusinessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InterfaceException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}
		});
		btnSalvar.setFont(new Font("Tahoma", Font.BOLD, 12));

		JScrollPane scrollPane = new JScrollPane();

		JScrollPane scrollPane_1 = new JScrollPane();

		JButton button = new JButton(">");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if (tblSabores.getSelectedRow() >= 0) {
					Boolean existe = false;
					ProdutoTO produtoTO = produtoTableModelLista.produto
							.get(tblSabores.getSelectedRow());

					for (ProdutoTO to : produtoTOSelecionados) {
						if (to.getCodigo() == produtoTO.getCodigo())
							existe = Boolean.TRUE;
					}
					if (!existe) {
						produtoTOSelecionados.add(produtoTO);
						produtoTableModelSelecionados = new ProdutoTableModel(
								produtoTOSelecionados);
						tblSaboresSelecionados
								.setModel(produtoTableModelSelecionados);
					}

				}
			}
		});

		JButton button_1 = new JButton("<");
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if (tblSabores.getSelectedRow() >= 0) {
					ProdutoTO produtoTO = produtoTableModelSelecionados.produto
							.get(tblSaboresSelecionados.getSelectedRow());
					List<ProdutoTO> produtoTOs = new ArrayList<ProdutoTO>();
					for (ProdutoTO produtoTOSel : produtoTOSelecionados) {
						if (produtoTO.getCodigo() != produtoTOSel.getCodigo()) {
							produtoTOs.add(produtoTOSel);
						}
					}
					produtoTOSelecionados = new ArrayList<ProdutoTO>();
					produtoTOSelecionados.addAll(produtoTOs);
					produtoTableModelSelecionados = new ProdutoTableModel(
							produtoTOSelecionados);
					tblSaboresSelecionados
							.setModel(produtoTableModelSelecionados);

				}

			}
		});
		GroupLayout gl_contentPane = new GroupLayout(contentPane);
		gl_contentPane
				.setHorizontalGroup(gl_contentPane
						.createParallelGroup(Alignment.TRAILING)
						.addGroup(
								gl_contentPane
										.createSequentialGroup()
										.addComponent(lblSabor)
										.addPreferredGap(
												ComponentPlacement.RELATED)
										.addComponent(txtSabor,
												GroupLayout.PREFERRED_SIZE,
												270, GroupLayout.PREFERRED_SIZE)
										.addContainerGap(251, Short.MAX_VALUE))
						.addGroup(
								gl_contentPane
										.createSequentialGroup()
										.addComponent(lblNewLabel,
												GroupLayout.PREFERRED_SIZE,
												250, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(
												ComponentPlacement.RELATED,
												216, Short.MAX_VALUE)
										.addComponent(btnVoltar).addGap(22))
						.addGroup(
								gl_contentPane
										.createSequentialGroup()
										.addContainerGap()
										.addComponent(scrollPane,
												GroupLayout.PREFERRED_SIZE,
												261, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(
												ComponentPlacement.RELATED)
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.LEADING)
														.addComponent(
																button_1,
																GroupLayout.PREFERRED_SIZE,
																41,
																GroupLayout.PREFERRED_SIZE)
														.addComponent(button))
										.addPreferredGap(
												ComponentPlacement.RELATED)
										.addComponent(scrollPane_1,
												GroupLayout.PREFERRED_SIZE,
												231, GroupLayout.PREFERRED_SIZE)
										.addGap(14))
						.addGroup(
								gl_contentPane.createSequentialGroup()
										.addContainerGap(464, Short.MAX_VALUE)
										.addComponent(btnSalvar).addGap(22)));
		gl_contentPane
				.setVerticalGroup(gl_contentPane
						.createParallelGroup(Alignment.LEADING)
						.addGroup(
								gl_contentPane
										.createSequentialGroup()
										.addContainerGap()
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.BASELINE)
														.addComponent(btnVoltar)
														.addComponent(
																lblNewLabel))
										.addGap(18)
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.BASELINE)
														.addComponent(lblSabor)
														.addComponent(
																txtSabor,
																GroupLayout.PREFERRED_SIZE,
																GroupLayout.DEFAULT_SIZE,
																GroupLayout.PREFERRED_SIZE))
										.addGroup(
												gl_contentPane
														.createParallelGroup(
																Alignment.LEADING)
														.addGroup(
																gl_contentPane
																		.createSequentialGroup()
																		.addGap(111)
																		.addComponent(
																				button)
																		.addPreferredGap(
																				ComponentPlacement.RELATED)
																		.addComponent(
																				button_1)
																		.addGap(149))
														.addGroup(
																gl_contentPane
																		.createSequentialGroup()
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addGroup(
																				gl_contentPane
																						.createParallelGroup(
																								Alignment.LEADING)
																						.addComponent(
																								scrollPane_1,
																								GroupLayout.DEFAULT_SIZE,
																								301,
																								Short.MAX_VALUE)
																						.addGroup(
																								gl_contentPane
																										.createSequentialGroup()
																										.addComponent(
																												scrollPane,
																												GroupLayout.DEFAULT_SIZE,
																												295,
																												Short.MAX_VALUE)
																										.addGap(6)))))
										.addPreferredGap(
												ComponentPlacement.RELATED)
										.addComponent(btnSalvar)
										.addContainerGap()));

		tblSaboresSelecionados = new JTable();
		scrollPane_1.setViewportView(tblSaboresSelecionados);

		tblSabores = new JTable();
		scrollPane.setViewportView(tblSabores);
		contentPane.setLayout(gl_contentPane);
	}
}
